package com.cskaoyan.javase._1extends._10final._3variable._0introduction;

/**
 * final修饰变量,表示最终的变量,最后的变量,即常量.
 * final修饰变量时,可以修饰以下三种:
 *      1.局部变量
 *      2.成员变量
 *      3.静态成员变量
 *
 * 具体讲解final修饰变量之前,先明确三点:
 *      1.final修饰变量表示常量.
 *          常量的分类:
 *              a.字面值常量,指的是直接写在代码中的值
 *                  比如1,2,3,1.2,"hello",null,'a'等
 *              b.自定义常量,指的就是final修饰的变量.
 *                  自定义常量的命名规范:
 *                  在规范中要求,自定义常量,尤其是final修饰的静态成员变量
 *                  常量的名字,单词字母,应该全部大写,每个单词之间用"_"分隔
 *                  比如: MAX_VALUE,MIN_VALUE
 *                  建议final修饰静态成员变量时,采取这种命名方式
 *
 *     2.final修饰变量后,仅表示该变量的取值不再变化,成为一个常量.
 *          其余的,比如变量的使用方式,变量的生命周期等不会发生变化.
 *          比如局部变量被final修饰后,就是一个局部常量,值不变,但使用方式不变.
 *
 *
 *     3.final修饰变量,Java中的变量有两种:
 *          a.基本数据类型,存储值
 *              所以final修饰基本数据类型
 *              表示该基本数据类型变量的取值不再发生变化,是一个常量.
 *
 *          b.引用数据类型,两部分,栈上存储引用,堆上存储对象
 *              final修饰引用数据类型,只能修饰引用,不可能修饰对象
 *              被final修饰的引用,表示引用成为一个常量
 *              说明引用中存储的地址成为一个常量 --> 引用不能再指向新的对象了
 *
 *              但是引用所指向的对象的状态能不能改变?
 *                  可以改变
 *
 * @since 14:39
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        final int a = 10;
        // a = 100;
    }
}
